﻿using OT.HikiSecureCenterApis.Req;

namespace OT.HikiSecureCenterApis.Service.OneCard.Req
{
    public class ReqAuthDownloadSpecialPersonDiy : ReqSearchBase
    {
        /// <summary>
        /// 是否必填：否
        /// 优先级，1 依次排队下发，2 优先下发(有风险)，默认为1
        /// </summary>
        public int priority { get; set; } = 1;
        /// <summary>
        /// 是否必填：否
        /// 回调地址（回调对象为附录C.34对象[List]，接口不需要认证，最大长度：1024）
        /// </summary>
        public string callbackUrl { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 设备通道对象（最大长度：100）
        /// </summary>
        public IList<ResourceInfo> resourceInfos { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 人员信息（最大长度：1000）
        /// </summary>
        public IList<PersonInfo> personInfos { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 计划模板配置信息（最大长度：4）
        /// </summary>
        public IList<TemplateConfigInfo> templateConfigInfos { get; set; }
    }

    public class ResourceInfo
    {
        /// <summary>
        /// 是否必填：是
        /// 资源的唯一标识（32位数字+字母（小写）字符串；资源为设备，最大长度：48）
        /// </summary>
        public string resourceIndexCode { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 资源类型（参考资源目录服务的资源类型（比如acsDevice:门禁设备,door:门禁点），在接口返回参数中都是设备类型，最大长度：32）
        /// </summary>
        public string resourceType { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 资源通道号（无特殊说明必填。门禁的人证设备、可视对讲设备等无通道的设备，默认通道号为1，最大长度：128）
        /// </summary>
        public IList<int> channelNos { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 资源通道唯一标识（acpsV1.2版本新增。在权限下载和配置接口入参时对应查询接口会返回，不作为查询接口的查询条件，最大长度：128）
        /// </summary>
        public IList<string> channelIndexCodes { get; set; }
    }

    public class CardList
    {
        /// <summary>
        /// 是否必填：是
        /// 卡号（支持8-20位数字+大写字母的卡号；请根据设备实际能力填写卡号）
        /// </summary>
        public string cardNo { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 卡类型，normalCard普通卡 hijackCard胁迫卡 patrolCard巡更卡）
        /// </summary>
        public string cardType { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 状态（ADD新增；UPDATE修改；DELETE删除）
        /// </summary>
        public string cardStatus { get; set; }
    }

    public class CardInfo
    {
        /// <summary>
        /// 是否必填：否
        /// 人员卡片集合(最多十张)
        /// </summary>
        public IList<CardList> cardList { get; set; }
    }

    public class FingerList
    {
        /// <summary>
        /// 是否必填：是
        /// 指纹编号
        /// </summary>
        public string fingerId { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 指纹数据(交互秘钥加密)
        /// </summary>
        public string fingerData { get; set; }
    }

    public class FingerInfo
    {
        /// <summary>
        /// 是否必填：否
        /// 是否清除人员下所有指纹
        /// </summary>
        public bool deleteAllFinger { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 指纹绑定卡号（以卡为中心设备时必填）
        /// </summary>
        public string cardNo { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 人员指纹集合(deleteAllFinger为true时,有值系统不处理)
        /// </summary>
        public IList<FingerList> fingerList { get; set; }
    }

    public class FaceList
    {
        /// <summary>
        /// 是否必填：是
        /// 人脸编号
        /// </summary>
        public string faceId { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 人脸数据模板(交互秘钥加密)
        /// </summary>
        public string modelData { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 人脸数据
        /// </summary>
        public string picUrl { get; set; }
    }

    public class FaceInfo
    {
        /// <summary>
        /// 是否必填：否
        /// 是否清除人员下所有人脸
        /// </summary>
        public bool deleteAllFace { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 人脸绑定卡号（以卡为中心设备时必填）
        /// </summary>
        public string cardNo { get; set; }
        /// <summary>
        /// 是否必填：否
        /// asw图片服务器存储节点编号（将人脸图片数据存储在asw时，可填写图片服务器的存储节点编号，并在人脸数据data的value中填写asw返回的uri（无ip端口））
        /// </summary>
        public string storageNodeCode { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 人员指纹集合(deleteAllFace为true时,有值系统不处理)
        /// </summary>
        public IList<FaceList> faceList { get; set; }
    }
    public class PersonInfo
    {
        /// <summary>
        /// 是否必填：是
        /// 操作类型（ADD新增；UPDATE修改；DELETE删除）
        /// </summary>
        public string personStatus { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 人员唯一标识（最大长度：64,建议32位字节，设备仅支持32字节，当超过时将截取前32位）
        /// </summary>
        public string personId { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 人员权限的有效期开始（为空时默认长期有效。采用ISO8601时间格式，如2019-09-03T17:30:08.000+08:00）
        /// </summary>
        public string beginTime { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 人员权限的有效期结束（为空时默认长期有效。）
        /// </summary>
        public string endTime { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 姓名（最大长度：32）
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 人员类型(COMMON普通人GUEST访客BLACKLIST黑名单SUPER管理员DISABLED残疾人)
        /// </summary>
        public string personType { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 人员密码(以卡为中心设备为卡片密码)
        /// </summary>
        public string password { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 卡片信息(以卡为中心设备时必填)
        /// </summary>
        public CardInfo cardInfo { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 指纹信息
        /// </summary>
        public FingerInfo fingerInfo { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 人脸信息
        /// </summary>
        public FaceInfo faceInfo { get; set; }
        /// <summary>
        /// 是否必填：否
        /// 人员扩展信息(Dictionary<String, Object> key-value形式冻结、首人等)
        /// </summary>
        public Dictionary<string, object> personExtendData { get; set; }
    }

    public class TemplateConfigInfo
    {
        /// <summary>
        /// 是否必填：是
        /// 维度（范围：1-4，支持4维度计划模板配置）
        /// </summary>
        public int dimension { get; set; }
        /// <summary>
        /// 是否必填：是
        /// 计划模板Id
        /// </summary>
        public string templateId { get; set; }
    }
}
